package com.iwhalecloud.bss.kite.cucc.order.accept.process.impl;

import com.iwhalecloud.bss.kite.common.chain.IHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.AcctItemHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.AdditionalOfferInstHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.CorrectOrderHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.CustomerOrderHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.DataPreparationHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.DataResponseHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.DevStaffInfoHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.DismantleHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.InstAssembleHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderAssembleHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderBeforeSaveHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderCommitHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderConfirmHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderContactInfoHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderHandlerInfoHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderItemAttrHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderSaveHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.OrderSplitHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.ProdInstAcctRelHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.ProdTransferHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.ServiceInitHandler;
import com.iwhalecloud.bss.kite.cucc.order.accept.chain.impl.TransferHandler;
import com.iwhalecloud.bss.kite.order.client.dto.OrderRequest;
import com.ztesoft.bss.common.util.SpringUtil;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * <Description> <br>
 * 复杂流程处理器适用新装、修改业务
 *
 * @author xiao.xuzhang<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2020年2月12日 <br>
 * @since R9.0<br>
 * @see com.iwhalecloud.bss.kite.cucc.order.accept.process.impl <br>
 */
@Component
public class ComplexBusinessProcessor extends AbstractOrderBusinessProcessor {

    @Override
    protected List<IHandler<OrderRequest>> listDefaultHandlers() {
        List<IHandler<OrderRequest>> handlers = new ArrayList<>();

        // 1、数据准备
        handlers.add(SpringUtil.getBean(DataPreparationHandler.class));

        // 2、客户订单处理
        handlers.add(SpringUtil.getBean(CustomerOrderHandler.class));

        // 3、修正业务处理
        handlers.add(SpringUtil.getBean(CorrectOrderHandler.class));

        // 4、业务初始化
        handlers.add(SpringUtil.getBean(ServiceInitHandler.class));

        // 5.1、实例对象构造
        handlers.add(SpringUtil.getBean(InstAssembleHandler.class));

        // 5.2、补充账户定制关系
        handlers.add(SpringUtil.getBean(ProdInstAcctRelHandler.class));

        // 5.3、实例拆机/退订处理
        handlers.add(SpringUtil.getBean(DismantleHandler.class));

        // 5.4、实例过户处理
        handlers.add(SpringUtil.getBean(TransferHandler.class));

        // 5.5、产品互改处理
        handlers.add(SpringUtil.getBean(ProdTransferHandler.class));

        // 5.6、可选包销售品实例处理
        handlers.add(SpringUtil.getBean(AdditionalOfferInstHandler.class));

        // 6.1、订单项对象构造
        handlers.add(SpringUtil.getBean(OrderAssembleHandler.class));

        // 6.2、订单分解
        handlers.add(SpringUtil.getBean(OrderSplitHandler.class));

        // 6.3、订单项属性处理
        handlers.add(SpringUtil.getBean(OrderItemAttrHandler.class));

        // 6.4、订单费用项构造
        handlers.add(SpringUtil.getBean(AcctItemHandler.class));

        // 6.5、订单经办人构造
        handlers.add(SpringUtil.getBean(OrderHandlerInfoHandler.class));

        // 6.6、订单促销人构造
        handlers.add(SpringUtil.getBean(DevStaffInfoHandler.class));

        // 6.7、订单联系人构造
        handlers.add(SpringUtil.getBean(OrderContactInfoHandler.class));

        // 7、订单确认处理(订单数据调整或者补充)
        handlers.add(SpringUtil.getBean(OrderConfirmHandler.class));

        // 8.1、订单保存前处理
        handlers.add(SpringUtil.getBean(OrderBeforeSaveHandler.class));

        // 8.2、订单保存处理
        handlers.add(SpringUtil.getBean(OrderSaveHandler.class));

        // 9、订单提交
        handlers.add(SpringUtil.getBean(OrderCommitHandler.class));

        // 10、返回结果处理
        handlers.add(SpringUtil.getBean(DataResponseHandler.class));

        return handlers;
    }
}
